package com.dimples.dd.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.dimples.dd.common.model.Option;
import com.dimples.dd.common.pojo.PageResult;
import com.dimples.dd.system.model.entity.SystemDictDataDO;
import com.dimples.dd.system.model.form.DictForm;
import com.dimples.dd.system.model.query.DictPageQuery;
import com.dimples.dd.system.model.vo.DictDataSimpleRespVO;
import com.dimples.dd.system.model.vo.DictPageVO;

import java.util.List;

public interface SystemDictDataService extends IService<SystemDictDataDO> {

    /**
     * 分页查询字典数据
     *
     * @param queryParams 查询参数 {@link DictPageQuery}
     * @return 分页结果 {@link PageResult< DictPageVO >}
     */
    PageResult<DictPageVO> selectDictPage(DictPageQuery queryParams);

    /**
     * 根据字典编码查询字典数据
     *
     * @param id 字典类型id
     * @return 字典数据 {@link List< Option< Long > >}
     */
    DictForm selectDictForm(Long id);

    /**
     * 获得字典数据列表
     *
     * @param status   状态
     * @param dictType 字典类型
     * @return 字典数据全列表
     */
    List<DictDataSimpleRespVO> selectDictDataList(Integer status, String dictType);

    /**
     * 新增字典数据
     *
     * @param dictForm 字典数据 {@link DictForm}
     * @return 是否成功
     */
    boolean createDict(DictForm dictForm);

    /**
     * 修改字典数据
     *
     * @param id       字典数据id
     * @param dictForm 字典数据 {@link DictForm}
     * @return 是否成功
     */
    boolean updateDict(Long id, DictForm dictForm);

    /**
     * 删除字典数据
     *
     * @param ids 字典数据id
     * @return 是否成功
     */
    boolean deleteDict(String ids);

    /**
     * 根据字典类型编码查询字典数据
     *
     * @param typeCode 字典类型编码
     * @return 字典数据 {@link List< Option< String > >}
     */
    List<Option<String>> listDictOptions(String typeCode);

    /**
     * 根据字典类型编码查询存在字典数据的字典类型Id
     *
     * @param typeCodeList 字典类型编码
     * @return 字典数据 {@link List<String>}
     */
    List<String> selectDictTypeByTypeCode(List<String> typeCodeList);
}
